package br.com.admGearman.consulta.apresentacao;

import java.util.ArrayList;
import java.util.List;

import br.com.admGearman.cadastro.negocio.BandeiraNgc;
import br.com.admGearman.cadastro.negocio.EstEmpresaNgc;
import br.com.admGearman.cadastro.vo.BandeiraVo;
import br.com.admGearman.cadastro.vo.EstEmpresaVo;
import br.com.admGearman.consulta.negocio.ControleArquivoNgc;
import br.com.admGearman.consulta.vo.ControleArquivoVo;
import br.com.admGearman.util.jsf.AbstractBean;
import br.com.admGearman.util.jsf.JSFUtil;
import br.com.admGearman.util.negocio.DominioNgc;
import br.com.admGearman.util.vo.DominioVo;
import br.com.r2.exception.R2Exception;
import br.com.r2.util.tipodado.Flag;
import br.com.r2.util.tipodado.Texto;
import br.com.r2.util.tipodado.YesNo;

public class ControleArquivoBean extends AbstractBean<ControleArquivoVo, ControleArquivoNgc>
{

   private List<EstEmpresaVo> listaEmpresas;
   
   private List<BandeiraVo> listaBandeiras;

   private List<DominioVo> listaTipoArquivos;
   
   JSFUtil util = new JSFUtil();
   
   public ControleArquivoBean()
   {
      super(ControleArquivoNgc.getInstancia());
      this.ACTION_SEARCH = "controleArquivo";
      this.pageTitle = "titulo_controle_arquivo";
   }
   
   @Override
   public String preparaPesquisar()
   {
      String retorno = super.preparaPesquisar();
      this.getSearchObject().setEstEmpresaVo(new EstEmpresaVo());
      this.getSearchObject().setBandeiraVo(new BandeiraVo());
      
      return retorno;
   }

   @Override
   protected void setListaPesquisa() throws R2Exception
   {
      setarListaEmpresas();
      setarListaBandeiras();
      setarListaTipoArquivos();
   }

   private void setarListaBandeiras() throws R2Exception
   {
      this.listaBandeiras = new ArrayList<BandeiraVo>();
      BandeiraVo bandeiraVo = new BandeiraVo();
      bandeiraVo.setFlagAtivo(new Flag(YesNo.YES));
      List<BandeiraVo> lista = BandeiraNgc.getInstancia().pesquisar(bandeiraVo,0);

      BandeiraVo vazio = new BandeiraVo();
      vazio.setDescricao(new Texto("TODAS"));

      this.listaBandeiras.add(vazio);
      this.listaBandeiras.addAll(lista);
   }

   private void setarListaEmpresas() throws R2Exception
   {
      this.listaEmpresas = new ArrayList<EstEmpresaVo>();
      List<EstEmpresaVo> listaEmp = EstEmpresaNgc.getInstancia().pesquisar(new EstEmpresaVo(), 0);
      
      EstEmpresaVo vazio = new EstEmpresaVo();
      vazio.setDescricao(new Texto("TODAS"));
      
      this.listaEmpresas.add(vazio);
      this.listaEmpresas.addAll(listaEmp);
   }

   private void setarListaTipoArquivos() throws R2Exception
   {
      this.listaTipoArquivos = new ArrayList<DominioVo>();
      DominioVo dominioVo = new DominioVo();
      dominioVo.setNomeCampo(new Texto("TIPO_ARQUIVO"));
      dominioVo.setFlagAtivo(new Flag("S"));
      List<DominioVo> lista = DominioNgc.getInstancia().pesquisar(dominioVo, 0);
      
      DominioVo vazio = new DominioVo();
      vazio.setNomeValor(new Texto("TODAS"));
      
      this.listaTipoArquivos.add(vazio);
      this.listaTipoArquivos.addAll(lista);
   }

   @Override
   protected int getJoinPesquisar()
   {
      int join = ControleArquivoNgc.JOIN_EST_EMPRESA
                 | ControleArquivoNgc.JOIN_BANDEIRA;
      
      return join;
   }

   public List<EstEmpresaVo> getListaEmpresas()
   {
      return listaEmpresas;
   }

   public void setListaEmpresas(List<EstEmpresaVo> listaEmpresas)
   {
      this.listaEmpresas = listaEmpresas;
   }

   public List<BandeiraVo> getListaBandeiras()
   {
      return listaBandeiras;
   }

   public void setListaBandeiras(List<BandeiraVo> listaBandeiras)
   {
      this.listaBandeiras = listaBandeiras;
   }

   public List<DominioVo> getListaTipoArquivos()
   {
      return listaTipoArquivos;
   }

   public void setListaTipoArquivos(List<DominioVo> listaTipoArquivos)
   {
      this.listaTipoArquivos = listaTipoArquivos;
   }
   
}
